rm(list = ls()) # borramos entorno
# setwd(dirname(rstudioapi::getSourceEditorContext()$path)) # fijamos directorio
# Instalamos paquetes necesarios
repos <- "http://cran.us.r-project.org"
if(!require(ggplot2)) install.packages("ggplot2", repos = repos)
if(!require(latex2exp)) install.packages("latex2exp", repos = repos)
if(!require(tidyverse)) install.packages("tidyverse", repos = repos)
if(!require(purrr)) install.packages("purrr", repos = repos)
if(!require(lubridate)) install.packages("lubridate", repos = repos)
if(!require(ggthemes)) install.packages("ggthemes", repos = repos)
if(!require(colorspace)) install.packages("colorspace", repos = repos)
if(!require(patchwork)) install.packages("patchwork", repos = repos)
if(!require(here)) install.packages("here", repos = repos)
if(!require(glue)) install.packages("glue", repos = repos)
if(!require(pdftools)) install.packages("pdftools", repos = repos)
if(!require(plotly)) install.packages("plotly", repos = repos)
if(!require(RColorBrewer)) install.packages("RColorBrewer", repos = repos)
if(!require(climaemet)) install.packages("climaemet", repos = repos)
if(!require(scico)) install.packages("scico", repos = repos)
if(!require(rcartocolor)) install.packages("rcartocolor", repos = repos)
options("scipen" = 10)
# Fuentes para los gráficos
library(showtext)
## Loading required package: sysfonts
## Loading required package: showtextdb
font_add_google("Lobster Two", "lobstertwo")
font_add_google("Poppins", "poppins")
showtext_auto()

# Tema base
theme_set(theme_bw())
theme_update(
  legend.position = "top", # posición leyenda
  # Fuentes y ajustes de la leyenda 
  legend.text = element_text(size = 11, family = "poppins"),
  legend.title = element_text(face = "bold", size = 13,
                              family = "poppins"),
  # Fuentes de los textos
  text = element_text(family = "poppins", size = 11, color = "black"),
  # Fuentes y ajustes de título, subtítulo y caption
  plot.title = element_text(family = "poppins", size = 23,
                            face = "bold", color = "#2a475e"),
  plot.subtitle = element_text(family = "poppins", size = 11,
                               face = "bold", color = "black"),
  plot.caption = element_text(size = 11, family = "poppins"),
  # Fuentes y ajustes de los ejes
  axis.text = element_text(size = 11, color = "grey50",
                           family = "poppins"),
  axis.title = element_text(size = 15, family = "poppins"),
  axis.ticks = element_blank(), axis.line = element_line(colour = "grey50"),
  # Ajustes del grid
  rect = element_blank(), panel.grid = element_line(color = "#b4aea9"),
  panel.grid.minor = element_blank(),
  panel.grid.major.x = element_blank(),
  panel.grid.major.y = element_line(linetype = "dashed"),
  plot.background =
    element_rect(fill = "#fbf9f4", color = "#fbf9f4"),
  # Márgenes
  plot.margin = # márgenes
    margin(t = 0.5, b = 0.5, r = 0.9, l = 0.9, "cm"))
# Acceso a datos del AEMET: necesitamos una key para la API
apikey <- paste0("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbHZhcmV6bGphdmll",
                 "ckB1bmlvdmkuZXMiLCJqdGkiOiJjYmFlZDczYy1lYmU0LTQ0OW",
                 "EtYmQ1OC03NTI1YWE3NjQ0ZDIiLCJpc3MiOiJBRU1FVCIsImlhd",
                 "CI6MTYyNTA0ODc0NCwidXNlcklkIjoiY2JhZWQ3M2MtZWJlNC00",
                 "NDlhLWJkNTgtNzUyNWFhNzY0NGQyIiwicm9sZSI6IiJ9.IWjmNed",
                 "uaFAD6YyUirJVBd79GzoRwcOPvGwfi8UY8mM")

# Lista de estaciones del AEMET
estaciones <- aemet_stations(apikey)

# Ejemplos:
#
# ALICANTE-ELCHE AEROPUERTO --> id: "8019"
# ASTURIAS AEROPUERTO --> id: "1212E"
# BARCELONA AEROPUERTO BARCELONA --> id: "0076"
# BILBAO AEROPUERTO --> id: "1082"
# A CORUÑA AEROPUERTO --> id: "1387E"
# GIJÓN, PUERTO --> id: "1208H"
# GRANADA AEROPUERTO --> id: "5530E"
# LEÓN AEROPUERTO --> id: "2661B"
# MÁLAGA AEROPUERTO --> id: "6155A"
# MADRID AEROPUERTO --> id: "3129"
# MADRID, RETIRO --> id: "3195"
# MURCIA --> id: "7178I"
# OVIEDO --> id: "1249I"
# PAMPLONA, AEROPUERTO --> id: "9263D"
# SANTANDER AEROPUERTO CANTABRIA --> id: "1109"
# SANTIAGO DE COMPOSTELA AEROPUERTO --> id: "1428"
# SEVILLA AEROPUERTO --> id: "5783"
# VALENCIA AEROPUERTO --> id: "8414A"
# VITORIA GASTEIZ AEROPUERTO --> id: "9091R"
# ZARAGOZA, AEROPUERTO --> id: "9434"

# Extracción de datos de la estación del AEMET requerida
#
# station: código de la estación (station = "3129" para Madrid-Barajas)
# apikey: clave para la api del Open Data del AEMET. Puedes solicitar
#         una en https://opendata.aemet.es/centrodedescargas/obtencionAPIKey
# start: año inicial // end: año final
#
# https://cran.r-project.org/web/packages/climaemet/readme/README.html

# Ejemplo de extracción: Madrid aeropuerto
# Sustituir ... en «station =...» por el código de tu estación
# Tardará unos minutos ya que el AEMET tiene restricciones en el servidor
# datos_diarios <-
#   aemet_daily_period(station = "3129", apikey = apikey,
#                      start = 1961, end = 2021)

# # Guardamos los datos en nuestro ordenador en formato .RData
# save(datos_diarios, file = "./datos_diarios_1961_2021.RData")

# Si ya has ejecutado la llamada a los datos una vez, y los tienes
# guardados (con el nombre del fichero .RData que hayas escrito)
# load("./datos_diarios_1961_2021.RData")

# Cargamos datos de Madrid, Barcelona, Valencia, Sevilla, Zaragoza,
# Málaga, Murcia, Bilbao, Coruña, Gijón
datos_aemet <- list()

load("./datos_alicante_aeropuerto_1961_2021.RData")
datos_aemet[[1]] <- datos_diarios

load("./datos_barcelona_aeropuerto_1961_2021.RData")
datos_aemet[[2]] <- datos_diarios

load("./datos_bilbao_aeropuerto_1961_2021.RData")
datos_aemet[[3]] <- datos_diarios

load("./datos_gijon_aeropuerto_1961_2021.RData")
datos_aemet[[4]] <- datos_diarios

load("./datos_madrid_barajas_1961_2021.RData")
datos_aemet[[5]] <- datos_diarios

load("./datos_malaga_aeropuerto_1961_2021.RData")
datos_aemet[[6]] <- datos_diarios

load("./datos_sevilla_aeropuerto_1961_2021.RData")
datos_aemet[[7]] <- datos_diarios

load("./datos_valencia_aeropuerto_1961_2021.RData")
datos_aemet[[8]] <- datos_diarios

load("./datos_zaragoza_aeropuerto_1961_2021.RData")
datos_aemet[[9]] <- datos_diarios

names(datos_aemet) <-
  c("alicante_aeropuerto", "barcelona_aeropuerto", "bilbao_aeropuerto",
    "gijon_aeropuerto", "madrid_aeropuerto", "malaga_aeropuerto",
    "sevilla_aeropuerto", "valencia_aeropuerto", "zaragoza_aeropuerto")
# Las temperaturas vienen en caracteres, convertimos a números
datos_aemet <- datos_aemet %>%
  map(mutate, tmin = as.numeric(gsub(",", ".", tmin)),
      tmax = as.numeric(gsub(",", ".", tmax)),
      tmed = as.numeric(gsub(",", ".", tmed)))

# Añadimos etiquetas de fechas y décadas
datos_aemet <- datos_aemet %>%
  map(mutate, dia_anual = lubridate::yday(fecha),
      mes = lubridate::month(fecha),
      anno = lubridate::year(fecha), decada = anno %/% 10 * 10,
      decada = if_else(decada == 2020, "2020–2021",
                       paste0(decada, "–", decada + 9)),
      quinquenio = anno %/% 5 * 5,
      quinquenio = if_else(quinquenio == 2020, "2020–2021",
                           paste0(quinquenio, "–", quinquenio + 4)))
  
# Estadísticas por años
datos_aemet <- datos_aemet %>%
  map(mutate, dia_tmax = fecha[which.max(tmax)],
      dia_tmin = fecha[which.min(tmin)],
      media_anno_tmax = mean(tmax, na.rm = TRUE),
      media_anno_tmin = mean(tmin, na.rm = TRUE)) %>%
  map(ungroup)

# Estadísticas por quinquenios
datos_aemet <- datos_aemet %>%
  map(group_by, quinquenio) %>%
  map(mutate, quinq_tmax = fecha[which.max(tmax)],
      quinq_tmin = fecha[which.min(tmin)],
      media_quinq_tmax = mean(tmax, na.rm = TRUE),
      media_quinq_tmin = mean(tmin, na.rm = TRUE)) %>%
  map(ungroup)

# Estadísticas por meses
datos_aemet <- datos_aemet %>%
  map(group_by, mes) %>%
  map(mutate, dia_mes_tmax = fecha[which.max(tmax)],
      dia_mes_tmin = fecha[which.min(tmin)],
      media_mes_tmax = mean(tmax, na.rm = TRUE),
      media_mes_tmin = mean(tmin, na.rm = TRUE)) %>%
  map(ungroup)
# 
# # Estadísticas por meses-años
# datos_aemet <- datos_aemet %>%
#   map(group_by, anno, mes) %>%
#   map(mutate, dia_mes_anno_tmax = fecha[which.max(tmax)],
#       dia_mes_anno_tmin = fecha[which.min(tmin)],
#       media_mes_anno_tmax = mean(tmax, na.rm = TRUE),
#       media_mes_anno_tmin = mean(tmin, na.rm = TRUE)) %>%
#   map(ungroup)

# Creamos diccionario de meses
meses <- tibble(dia_anual = c(1, 32, 60, 91, 121, 152, 182,
                              213, 244, 274, 305, 335),
                mes = c("Ene", "Feb", "Mar", "Apbr", "May", "Jun",
                        "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"))
# Temperatura máxima Madrid
fig1 <-
  ggplot(datos_aemet$madrid_aeropuerto,
         aes(dia_anual, tmax, color = anno)) +
  geom_point(alpha = 0.5, size = 1) + coord_cartesian(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(0, 70, by = 10)) +
  scale_color_viridis_c(option = "turbo", direction = -1, name = NULL,
                        breaks = c(1961, seq(1970, 2020, by = 10), 2021)) +
  guides(color = guide_colorsteps(barwidth = unit(50, "lines"),
                                  barheight = unit(0.5, "lines"))) +
  labs(x = "Meses", y = "Temperatura máxima diaria (ºC)",
       title = paste0("TEMPERATURAS MÁXIMAS DIARIAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace) | ",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") 
fig1

# Temperatura mínima Madrid
fig2 <-
  ggplot(datos_aemet$madrid_aeropuerto,
         aes(dia_anual, tmin, color = anno)) +
  geom_point(alpha = 0.5, size = 1) + coord_cartesian(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(0, 70, by = 10)) +
  scale_color_viridis_c(option = "turbo", direction = -1, name = NULL,
                        breaks = c(1961, seq(1970, 2020, by = 10), 2021)) +
  guides(color = guide_colorsteps(barwidth = unit(50, "lines"),
                                  barheight = unit(0.5, "lines"))) +
  labs(x = "Meses", y = "Temperatura mínima diaria (ºC)",
       title = paste0("TEMPERATURAS MÍNIMAS DIARIAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace) | ",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") 
fig2

# Temperatura máxima
fig3 <-
  ggplot(datos_aemet$madrid_aeropuerto %>% filter(anno != 2021),
         aes(dia_anual, tmax, color = anno)) +
  geom_line(alpha = 0.5) +
  geom_line(data = datos_aemet$madrid_aeropuerto %>%
              filter(anno == 2021),
            aes(dia_anual, tmax), alpha = 0.7, size = 1.3,
            color = "black") +
  coord_cartesian(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(0, 70, by = 10)) +
  guides(color = guide_colorsteps(barwidth = unit(40, "lines"),
                                  barheight = unit(0.5, "lines"))) +
  labs(x = "Meses", y = "Temperatura máxima diaria (ºC)",
       title =
         paste0("TEMPERATURAS MÁXIMAS DIARIAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace) | ",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") +
  scale_color_carto_c(palette = "Sunset", name = NULL,
                             breaks = seq(1960, 2020, by = 10))
fig3

# Temperatura mínima
fig4 <-
  ggplot(datos_aemet$madrid_aeropuerto %>% filter(anno != 2021),
         aes(dia_anual, tmin, color = anno)) +
  geom_line(alpha = 0.5) +
  geom_line(data = datos_aemet$madrid_aeropuerto %>%
              filter(anno == 2021),
            aes(dia_anual, tmin), alpha = 0.7, size = 1.3,
            color = "black") +
  coord_cartesian(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(0, 70, by = 10)) +
  guides(color = guide_colorsteps(barwidth = unit(40, "lines"),
                                  barheight = unit(0.5, "lines"))) +
  labs(x = "Meses", y = "Temperatura mínima diaria (ºC)",
       title =
         paste0("TEMPERATURAS MÍNIMAS DIARIAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace) | ",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") +
  scale_color_carto_c(palette = "Sunset", name = NULL,
                      breaks = seq(1960, 2020, by = 10))
fig4

# Reajustamos el layout
theme_update(legend.text = element_text(size = 11, color = "grey50",
                                        family = "poppins"),
             legend.title = element_text(face = "bold", size = 15,
                                         color = "grey20",
                                         family = "poppins"),
             text = element_text(family = "poppins", size = 11,
                                 color = "black"),
             plot.title = element_text(family = "poppins", size = 19,
                                       face = "bold", color = "#2a475e"),
             plot.subtitle = element_text(family = "poppins", size = 9, 
                                          face = "bold", color = "black"),
             plot.caption = element_text(size = 9, family = "poppins"),
             axis.text = element_text(size = 11, color = "grey50",
                                      family = "poppins"),
             axis.title = element_text(size = 11, family = "poppins"),
             plot.margin = # márgenes
               margin(t = 0.3, b = 0.3, r = 0.5, l = 0.5, "cm"))
# Gráfico de radar: máximas
fig5 <-
  ggplot(datos_aemet$madrid_aeropuerto, aes(dia_anual, tmin, color = anno)) +
  geom_point(alpha = 0.3, size = 1.3) +
  coord_polar(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(40, -20, by = -10),
                     limits = c(-20, 40)) +
  guides(color = guide_colorsteps(barwidth = unit(15, "lines"),
                                  barheight = unit(0.3, "lines"))) +
  labs(x = "Meses", y = "Temperatura mínima diaria (ºC)",
       title = paste0("TEMPERATURAS MÍNIMAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace)\n",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") +
  scale_color_viridis_c(option = "turbo", direction = -1, name = NULL,
                        breaks = c(1961, seq(1970, 2020, by = 10), 2021))
fig5

# radar máximas
fig6 <-
  ggplot(datos_aemet$madrid_aeropuerto, aes(dia_anual, tmax, color = anno)) +
  geom_point(alpha = 0.3, size = 1.3) +
  coord_polar(clip = "off") +
  scale_x_continuous(breaks = meses$dia_anual, labels = meses$mes,
                     expand = c(.001, .001)) +
  scale_y_continuous(labels = function(x) paste0(x, "°C"),
                     breaks = seq(50, -10, by = -10),
                     limits = c(-10, 50)) +
  guides(color = guide_colorsteps(barwidth = unit(15, "lines"),
                                  barheight = unit(0.3, "lines"))) +
  labs(x = "Meses", y = "Temperatura máxima diaria (ºC)",
       title = paste0("TEMPERATURAS MÁXIMAS EN MADRID-BARAJAS"),
       subtitle =
         paste0("Gráfico: Javier Álvarez Liébana (@DadosDeLaplace)\n",
                "Inspirado en «Daily maximum temperatures in Portland ",
                "from 1938–2021» (Cédric Scherer)"),
       caption = "Datos: temperaturas extraídas del AEMET (Open Data API)") +
  scale_color_viridis_c(option = "turbo", direction = -1, name = NULL,
                        breaks = c(1961, seq(1970, 2020, by = 10), 2021))
fig6


sessionInfo()
## R version 3.6.2 (2019-12-12)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Catalina 10.15.4
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] es_ES.UTF-8/es_ES.UTF-8/es_ES.UTF-8/C/es_ES.UTF-8/es_ES.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] showtext_0.9-2     showtextdb_3.0     sysfonts_0.8.3     rcartocolor_2.0.0 
##  [5] scico_1.2.0        climaemet_0.2.0    RColorBrewer_1.1-2 plotly_4.9.3      
##  [9] pdftools_2.3.1     glue_1.4.2         here_1.0.1         patchwork_1.1.1   
## [13] colorspace_2.0-1   ggthemes_4.2.4     lubridate_1.7.10   forcats_0.5.1     
## [17] stringr_1.4.0      dplyr_1.0.6        purrr_0.3.4        readr_1.4.0       
## [21] tidyr_1.1.3        tibble_3.1.2       tidyverse_1.3.1    latex2exp_0.5.0   
## [25] ggplot2_3.3.4     
## 
## loaded via a namespace (and not attached):
##  [1] fs_1.4.1               progress_1.2.2         httr_1.4.2            
##  [4] rprojroot_2.0.2        tools_3.6.2            backports_1.1.8       
##  [7] utf8_1.2.1             R6_2.5.0               DBI_1.1.0             
## [10] lazyeval_0.2.2         withr_2.4.2            prettyunits_1.1.1     
## [13] tidyselect_1.1.0       curl_4.3.2             compiler_3.6.2        
## [16] cli_2.5.0              rvest_1.0.0            xml2_1.3.2            
## [19] scales_1.1.1           askpass_1.1            digest_0.6.27         
## [22] foreign_0.8-72         rmarkdown_2.7          rio_0.5.16            
## [25] jpeg_0.1-8.1           pkgconfig_2.0.3        htmltools_0.5.1.1     
## [28] highr_0.9              maps_3.3.0             dbplyr_2.1.1          
## [31] htmlwidgets_1.5.2.9001 rlang_0.4.11           readxl_1.3.1          
## [34] rstudioapi_0.13        farver_2.1.0           generics_0.1.0        
## [37] jsonlite_1.7.2         zip_2.0.4              car_3.0-10            
## [40] magrittr_2.0.1         Rcpp_1.0.5             munsell_0.5.0         
## [43] fansi_0.5.0            abind_1.4-5            lifecycle_1.0.0       
## [46] stringi_1.5.3          yaml_2.2.1             carData_3.0-3         
## [49] climatol_3.1.2         grid_3.6.2             crayon_1.4.1          
## [52] haven_2.4.1            hms_1.0.0              magick_2.3            
## [55] knitr_1.32.10          pillar_1.6.1           ggpubr_0.4.0          
## [58] ggsignif_0.6.2         reprex_2.0.0           evaluate_0.14         
## [61] gganimate_1.0.5        qpdf_1.1               mapdata_2.3.0         
## [64] data.table_1.13.2      modelr_0.1.8           tweenr_1.0.1          
## [67] vctrs_0.3.8            cellranger_1.1.0       gtable_0.3.0          
## [70] assertthat_0.2.1       xfun_0.22              openxlsx_4.2.3        
## [73] broom_0.7.6            rstatix_0.7.0          viridisLite_0.4.0     
## [76] ellipsis_0.3.2